package crs.users.model;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;

import crs.auxiliares.model.CrsIdiomas;
import crs.perfiles.model.CrsPerfilCentro;
import crs.perfiles.model.CrsPerfilComercial;
import crs.perfiles.model.CrsPerfilEmpleado;
import crs.perfiles.model.CrsPerfilMedico;
import crs.perfiles.model.CrsPerfilUsuario;

/**
 * Users generated by hbm2java
 */
@Entity
@Table(name = "users", schema = "public", uniqueConstraints = {
		@UniqueConstraint(columnNames = "email"),
		@UniqueConstraint(columnNames = "username") })
public class Users implements java.io.Serializable {

	private int userid;
	private CrsIdiomas crsIdiomas;
	private String username;
	private String password;
	private boolean enabled;
	private String email;
	private String dni;
	private Date fechalta;
	private Date fechamod;
	private String nombre;
	private String apellido1;
	private String apellido2;
	private Long telmovil;
	private Long telfijo;
	private String observaciones;
	private CrsPerfilUsuario crsPerfilUsuario;
	private CrsPerfilComercial crsPerfilComercial;
	private Set crsDispositivoses = new HashSet(0);
	private Set crsAccesologs = new HashSet(0);
	private CrsPerfilCentro crsPerfilCentro;
	private Set crsCodaltas = new HashSet(0);
	private Set userRoleses = new HashSet(0);
	private CrsPerfilMedico crsPerfilMedico;
	private CrsPerfilEmpleado crsPerfilEmpleado;
	private Set crsSesioneses = new HashSet(0);
	private Set crsSolicitudeses = new HashSet(0);
	private Set crsDireccioneses = new HashSet(0);
	private Set crsMensajesEnviadoses = new HashSet(0);

	public Users() {
	}

	public Users(int userid, String username, String password, boolean enabled,
			String email, Date fechalta) {
		this.userid = userid;
		this.username = username;
		this.password = password;
		this.enabled = enabled;
		this.email = email;
		this.fechalta = fechalta;
	}

	public Users(int userid, CrsIdiomas crsIdiomas, String username,
			String password, boolean enabled, String email, String dni,
			Date fechalta, Date fechamod, String nombre, String apellido1,
			String apellido2, Long telmovil, Long telfijo,
			String observaciones, CrsPerfilUsuario crsPerfilUsuario,
			CrsPerfilComercial crsPerfilComercial, Set crsDispositivoses,
			Set crsAccesologs, CrsPerfilCentro crsPerfilCentro,
			Set crsCodaltas, Set userRoleses, CrsPerfilMedico crsPerfilMedico,
			CrsPerfilEmpleado crsPerfilEmpleado, Set crsSesioneses,
			Set crsSolicitudeses, Set crsDireccioneses, Set crsMensajesEnviadoses) {
		this.userid = userid;
		this.crsIdiomas = crsIdiomas;
		this.username = username;
		this.password = password;
		this.enabled = enabled;
		this.email = email;
		this.dni = dni;
		this.fechalta = fechalta;
		this.fechamod = fechamod;
		this.nombre = nombre;
		this.apellido1 = apellido1;
		this.apellido2 = apellido2;
		this.telmovil = telmovil;
		this.telfijo = telfijo;
		this.observaciones = observaciones;
		this.crsPerfilUsuario = crsPerfilUsuario;
		this.crsPerfilComercial = crsPerfilComercial;
		this.crsDispositivoses = crsDispositivoses;
		this.crsAccesologs = crsAccesologs;
		this.crsPerfilCentro = crsPerfilCentro;
		this.crsCodaltas = crsCodaltas;
		this.userRoleses = userRoleses;
		this.crsPerfilMedico = crsPerfilMedico;
		this.crsPerfilEmpleado = crsPerfilEmpleado;
		this.crsSesioneses = crsSesioneses;
		this.crsSolicitudeses = crsSolicitudeses;
		this.crsDireccioneses = crsDireccioneses;
		this.crsMensajesEnviadoses = crsMensajesEnviadoses;
	}

	@Id
	@Column(name = "userid", unique = true, nullable = false)
	public int getUserid() {
		return this.userid;
	}

	public void setUserid(int userid) {
		this.userid = userid;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "idiomaid")
	public CrsIdiomas getCrsIdiomas() {
		return this.crsIdiomas;
	}

	public void setCrsIdiomas(CrsIdiomas crsIdiomas) {
		this.crsIdiomas = crsIdiomas;
	}

	@Column(name = "username", unique = true, nullable = false, length = 20)
	public String getUsername() {
		return this.username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	@Column(name = "password", nullable = false, length = 200)
	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Column(name = "enabled", nullable = false)
	public boolean isEnabled() {
		return this.enabled;
	}

	public void setEnabled(boolean enabled) {
		this.enabled = enabled;
	}

	@Column(name = "email", unique = true, nullable = false, length = 80)
	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@Column(name = "dni", length = 15)
	public String getDni() {
		return this.dni;
	}

	public void setDni(String dni) {
		this.dni = dni;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "fechalta", nullable = false, length = 29)
	public Date getFechalta() {
		return this.fechalta;
	}

	public void setFechalta(Date fechalta) {
		this.fechalta = fechalta;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "fechamod", length = 29)
	public Date getFechamod() {
		return this.fechamod;
	}

	public void setFechamod(Date fechamod) {
		this.fechamod = fechamod;
	}

	@Column(name = "nombre", length = 80)
	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	@Column(name = "apellido1", length = 80)
	public String getApellido1() {
		return this.apellido1;
	}

	public void setApellido1(String apellido1) {
		this.apellido1 = apellido1;
	}

	@Column(name = "apellido2", length = 80)
	public String getApellido2() {
		return this.apellido2;
	}

	public void setApellido2(String apellido2) {
		this.apellido2 = apellido2;
	}

	@Column(name = "telmovil", precision = 15, scale = 0)
	public Long getTelmovil() {
		return this.telmovil;
	}

	public void setTelmovil(Long telmovil) {
		this.telmovil = telmovil;
	}

	@Column(name = "telfijo", precision = 15, scale = 0)
	public Long getTelfijo() {
		return this.telfijo;
	}

	public void setTelfijo(Long telfijo) {
		this.telfijo = telfijo;
	}

	@Column(name = "observaciones", length = 500)
	public String getObservaciones() {
		return this.observaciones;
	}

	public String getObservacionesConBr() {
		if (this.observaciones!=null){
			return this.observaciones.replaceAll("\r\n", "<br />");
		}else{
			return "";
		}
	}

	
	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

	@OneToOne(fetch = FetchType.LAZY, mappedBy = "users")
	public CrsPerfilUsuario getCrsPerfilUsuario() {
		return this.crsPerfilUsuario;
	}

	public void setCrsPerfilUsuario(CrsPerfilUsuario crsPerfilUsuario) {
		this.crsPerfilUsuario = crsPerfilUsuario;
	}

	@OneToOne(fetch = FetchType.LAZY, mappedBy = "users")
	public CrsPerfilComercial getCrsPerfilComercial() {
		return this.crsPerfilComercial;
	}

	public void setCrsPerfilComercial(CrsPerfilComercial crsPerfilComercial) {
		this.crsPerfilComercial = crsPerfilComercial;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "users")
	public Set getCrsDispositivoses() {
		return this.crsDispositivoses;
	}

	public void setCrsDispositivoses(Set crsDispositivoses) {
		this.crsDispositivoses = crsDispositivoses;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "users")
	public Set getCrsAccesologs() {
		return this.crsAccesologs;
	}

	public void setCrsAccesologs(Set crsAccesologs) {
		this.crsAccesologs = crsAccesologs;
	}

	@OneToOne(fetch = FetchType.LAZY, mappedBy = "users")
	public CrsPerfilCentro getCrsPerfilCentro() {
		return this.crsPerfilCentro;
	}

	public void setCrsPerfilCentro(CrsPerfilCentro crsPerfilCentro) {
		this.crsPerfilCentro = crsPerfilCentro;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "users")
	public Set getCrsCodaltas() {
		return this.crsCodaltas;
	}

	public void setCrsCodaltas(Set crsCodaltas) {
		this.crsCodaltas = crsCodaltas;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "users")
	public Set getUserRoleses() {
		return this.userRoleses;
	}

	public void setUserRoleses(Set userRoleses) {
		this.userRoleses = userRoleses;
	}

	@OneToOne(fetch = FetchType.LAZY, mappedBy = "users")
	public CrsPerfilMedico getCrsPerfilMedico() {
		return this.crsPerfilMedico;
	}

	public void setCrsPerfilMedico(CrsPerfilMedico crsPerfilMedico) {
		this.crsPerfilMedico = crsPerfilMedico;
	}

	@OneToOne(fetch = FetchType.LAZY, mappedBy = "users")
	public CrsPerfilEmpleado getCrsPerfilEmpleado() {
		return this.crsPerfilEmpleado;
	}

	public void setCrsPerfilEmpleado(CrsPerfilEmpleado crsPerfilEmpleado) {
		this.crsPerfilEmpleado = crsPerfilEmpleado;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "users")
	public Set getCrsSesioneses() {
		return this.crsSesioneses;
	}

	public void setCrsSesioneses(Set crsSesioneses) {
		this.crsSesioneses = crsSesioneses;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "users")
	public Set getCrsSolicitudeses() {
		return this.crsSolicitudeses;
	}

	public void setCrsSolicitudeses(Set crsSolicitudeses) {
		this.crsSolicitudeses = crsSolicitudeses;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "users", cascade=CascadeType.ALL)
	public Set getCrsDireccioneses() {
		return this.crsDireccioneses;
	}

	public void setCrsDireccioneses(Set crsDireccioneses) {
		this.crsDireccioneses = crsDireccioneses;
	}
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "users")
	public Set getCrsMensajesEnviadoses() {
		return this.crsMensajesEnviadoses;
	}

	public void setCrsMensajesEnviadoses(Set crsMensajesEnviadoses) {
		this.crsMensajesEnviadoses = crsMensajesEnviadoses;
	}

	
}
